// @flow
import React, { Component } from 'react'
import styles from './ChildTabs.css'
import universalFetch, { handleFetchError } from 'store/modules/fetch'
import { Tabs } from 'antd'
import { GlobalMenus } from './GlobalMenus'
const TabPane = Tabs.TabPane
import { connect } from 'react-redux'
type Props = {
  userId: string,
  saveGroupId: Function,
  saveDeviceData: Function,
  type: string,
  data: Array<Object>,
  history: Object,
  close: Function
}
type State = {
  defaultActiveKey: string,
  customerData: Array<Object>
}
export class GlobalTabs extends Component {
  state: State
  handleClick: () => void
  constructor (props: Props) {
    super(props)
    this.state = {
      defaultActiveKey: '',
      customerData: []
    }
    this.handleClick = this.handleClick.bind(this)
  }
  componentDidMount () {
    const { type } = this.props
    const { defaultActiveKey } = this.state
    const component = this
    universalFetch(`${__SERVICE_API__}device/customers?userId=${this.props.userId}&pageSize=200000&${type}=${defaultActiveKey}`)
    .then((res) => res.json())
    .then((json) => {
      if (json.code !== 200000) {
        component.setState({
          customerData: []
        })
        throw new Error(JSON.stringify({ code: json.code, message: json.message }))
      }
      this.setState({
        customerData: json.result
      })
    })
    .catch((error) => {
      this.setState({
        customerData: []
      })
      handleFetchError(error)
      console.error(error)
    })
  }
  handleClick (e: Object) {
    const { type } = this.props
    const component = this
    // $FlowFixMe
    universalFetch(`${__SERVICE_API__}device/customers?userId=${this.props.userId}&pageSize=200000&${type}=${e}`)
    .then((res) => res.json())
    .then((json) => {
      if (json.code !== 200000) {
        component.setState({
          customerData: []
        })
        throw new Error(JSON.stringify({ code: json.code, message: json.message }))
      }
      this.setState({
        customerData: json.result
      })
    })
    .catch((error) => {
      this.setState({
        customerData: []
      })
      handleFetchError(error)
      console.error(error)
    })
  }
  render () {
    const { data, history, saveGroupId, saveDeviceData } = this.props
    const { customerData, defaultActiveKey } = this.state
    return (
      <div className={styles['tabsCon']}>
        <Tabs
          size='small'
          tabPosition='left'
          defaultActiveKey={defaultActiveKey}
          onChange={this.handleClick}
        >
          {
            data.map((d, i) => {
              return <TabPane tab={<span>{d.label}</span>} key={d.value}>
                <GlobalMenus customerData={customerData}
                  history={history} saveGroupId={saveGroupId} saveDeviceData={saveDeviceData}
                  close={this.props.close} />
              </TabPane>
            })
          }
        </Tabs>
      </div>
    )
  }
}

const mapStatesToProps = (state) => {
  return {
    userId: state.user.userId
  }
}
export default connect(mapStatesToProps, {})(GlobalTabs)
